<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>Ball Balancing Plate: Config</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>

</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  <td id="projectlogo"><img alt="Logo" src="logo.jpg"/></td>
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">Ball Balancing Plate
   &#160;<span id="projectnumber">1.0.0</span>
   </div>
   <div id="projectbrief">ChibiOS-RT servos control firmware.</div>
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.7.6.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
</div>
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
  initNavTree('group__config.html','');
</script>
<div id="doc-content">
<div class="header">
  <div class="headertitle">
<div class="title">Config</div>  </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="member-group"></a>
Kernel parameters and options</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#ga195ab8ff3340a18d4513cbaf915078f2">CH_FREQUENCY</a>&#160;&#160;&#160;1000</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">System tick frequency.  <a href="#ga195ab8ff3340a18d4513cbaf915078f2"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#ga3c6800242611cf244a38c4a870e8515a">CH_TIME_QUANTUM</a>&#160;&#160;&#160;20</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Round robin interval.  <a href="#ga3c6800242611cf244a38c4a870e8515a"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#gac73902e3c40b375483f9dde71e83253d">CH_MEMCORE_SIZE</a>&#160;&#160;&#160;0</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Managed RAM size.  <a href="#gac73902e3c40b375483f9dde71e83253d"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#gac7ceed3b75958cb6f7a977aab5ee249f">CH_NO_IDLE_THREAD</a>&#160;&#160;&#160;FALSE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Idle thread automatic spawn suppression.  <a href="#gac7ceed3b75958cb6f7a977aab5ee249f"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Performance options</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#gaa5a3d403206b04dfa43ee769e8a220c6">CH_OPTIMIZE_SPEED</a>&#160;&#160;&#160;TRUE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">OS optimization.  <a href="#gaa5a3d403206b04dfa43ee769e8a220c6"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Subsystem options</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#ga881045654c5c0b04081bf89da3fe4534">CH_USE_REGISTRY</a>&#160;&#160;&#160;TRUE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Threads registry APIs.  <a href="#ga881045654c5c0b04081bf89da3fe4534"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#gac5e6308f66b8fdb57f0c849ed22b3d95">CH_USE_WAITEXIT</a>&#160;&#160;&#160;TRUE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Threads synchronization APIs.  <a href="#gac5e6308f66b8fdb57f0c849ed22b3d95"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#gab88f410fdc6a67192194a8431d991b27">CH_USE_SEMAPHORES</a>&#160;&#160;&#160;TRUE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Semaphores APIs.  <a href="#gab88f410fdc6a67192194a8431d991b27"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#ga866568c0387963f11c078a8d939c2284">CH_USE_SEMAPHORES_PRIORITY</a>&#160;&#160;&#160;FALSE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Semaphores queuing mode.  <a href="#ga866568c0387963f11c078a8d939c2284"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#gae9e6ff0fe1964761ea6e1bce51d8ee59">CH_USE_SEMSW</a>&#160;&#160;&#160;TRUE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Atomic semaphore API.  <a href="#gae9e6ff0fe1964761ea6e1bce51d8ee59"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#ga4f461a7b5edbff2405b7b40d2bb238a6">CH_USE_MUTEXES</a>&#160;&#160;&#160;TRUE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Mutexes APIs.  <a href="#ga4f461a7b5edbff2405b7b40d2bb238a6"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#ga24fd7fe539fd6094b5db3215e1721c9c">CH_USE_CONDVARS</a>&#160;&#160;&#160;TRUE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Conditional Variables APIs.  <a href="#ga24fd7fe539fd6094b5db3215e1721c9c"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#gaccc2c032c409bced696f75877e270979">CH_USE_CONDVARS_TIMEOUT</a>&#160;&#160;&#160;TRUE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Conditional Variables APIs with timeout.  <a href="#gaccc2c032c409bced696f75877e270979"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#ga5e3ac686cd33ad40a89aaaf97b3dc781">CH_USE_EVENTS</a>&#160;&#160;&#160;TRUE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Events Flags APIs.  <a href="#ga5e3ac686cd33ad40a89aaaf97b3dc781"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#ga64a6ad752750f42fe2474d3e7f191a71">CH_USE_EVENTS_TIMEOUT</a>&#160;&#160;&#160;TRUE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Events Flags APIs with timeout.  <a href="#ga64a6ad752750f42fe2474d3e7f191a71"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#ga3823e336736d522bbfaf780c86746482">CH_USE_MESSAGES</a>&#160;&#160;&#160;TRUE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Synchronous Messages APIs.  <a href="#ga3823e336736d522bbfaf780c86746482"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#gaf48947f33ed7a44a7701d84d83d94a1c">CH_USE_MESSAGES_PRIORITY</a>&#160;&#160;&#160;FALSE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Synchronous Messages queuing mode.  <a href="#gaf48947f33ed7a44a7701d84d83d94a1c"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#ga6cf1736db681617019f96c4c209d2716">CH_USE_MAILBOXES</a>&#160;&#160;&#160;TRUE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Mailboxes APIs.  <a href="#ga6cf1736db681617019f96c4c209d2716"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#gaabe4bd52d2fd1b180ebba1d1e8243051">CH_USE_QUEUES</a>&#160;&#160;&#160;TRUE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">I/O Queues APIs.  <a href="#gaabe4bd52d2fd1b180ebba1d1e8243051"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#gaff85f4d919dac30a337ce2f34e2fa1af">CH_USE_MEMCORE</a>&#160;&#160;&#160;TRUE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Core Memory Manager APIs.  <a href="#gaff85f4d919dac30a337ce2f34e2fa1af"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#gaaeb266ab6131572f1d8f164bddf2da3f">CH_USE_HEAP</a>&#160;&#160;&#160;TRUE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Heap Allocator APIs.  <a href="#gaaeb266ab6131572f1d8f164bddf2da3f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#ga4785d390f3a787916c5a5c41e953577d">CH_USE_MALLOC_HEAP</a>&#160;&#160;&#160;FALSE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">C-runtime allocator.  <a href="#ga4785d390f3a787916c5a5c41e953577d"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#gac456517b37f104d2226fef50310c79f8">CH_USE_MEMPOOLS</a>&#160;&#160;&#160;TRUE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Memory Pools Allocator APIs.  <a href="#gac456517b37f104d2226fef50310c79f8"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#gaae4996e24bbee7d66528671cec8b8749">CH_USE_DYNAMIC</a>&#160;&#160;&#160;TRUE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Dynamic Threads APIs.  <a href="#gaae4996e24bbee7d66528671cec8b8749"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Debug options</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#ga10db71bc25605169dddc82c1604b0a16">CH_DBG_SYSTEM_STATE_CHECK</a>&#160;&#160;&#160;TRUE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Debug option, system state check.  <a href="#ga10db71bc25605169dddc82c1604b0a16"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#gaef984ca3bfd8a71478ad55ce6e56a8bb">CH_DBG_ENABLE_CHECKS</a>&#160;&#160;&#160;TRUE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Debug option, parameters checks.  <a href="#gaef984ca3bfd8a71478ad55ce6e56a8bb"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#gad602fd2546073869a10859158d865b9b">CH_DBG_ENABLE_ASSERTS</a>&#160;&#160;&#160;TRUE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Debug option, consistency checks.  <a href="#gad602fd2546073869a10859158d865b9b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#ga8bc4cfd861131aeb3c880347d0068229">CH_DBG_ENABLE_TRACE</a>&#160;&#160;&#160;TRUE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Debug option, trace buffer.  <a href="#ga8bc4cfd861131aeb3c880347d0068229"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#gab93d9ee904f15d4f2c26ef2a1394a1d7">CH_DBG_ENABLE_STACK_CHECK</a>&#160;&#160;&#160;TRUE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Debug option, stack checks.  <a href="#gab93d9ee904f15d4f2c26ef2a1394a1d7"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#ga6a859dd249adfb66b9bbf809061ea06c">CH_DBG_FILL_THREADS</a>&#160;&#160;&#160;TRUE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Debug option, stacks initialization.  <a href="#ga6a859dd249adfb66b9bbf809061ea06c"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#gadc9c00c2e5b6e766ded8dfa77c0c90c1">CH_DBG_THREADS_PROFILING</a>&#160;&#160;&#160;TRUE</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Debug option, threads profiling.  <a href="#gadc9c00c2e5b6e766ded8dfa77c0c90c1"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Kernel hooks</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#gaba26fd717f33330fa56dcc7919a3f02f">THREAD_EXT_FIELDS</a>&#160;&#160;&#160;/* Add threads custom fields here.*/</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Threads descriptor structure extension.  <a href="#gaba26fd717f33330fa56dcc7919a3f02f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#gaeb57466a9200b8c073ac96a3f1a9c34c">THREAD_EXT_INIT_HOOK</a>(tp)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Threads initialization hook.  <a href="#gaeb57466a9200b8c073ac96a3f1a9c34c"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#gab8f241a87da52027625c9cc3d8403ebb">THREAD_EXT_EXIT_HOOK</a>(tp)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Threads finalization hook.  <a href="#gab8f241a87da52027625c9cc3d8403ebb"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#gac0317ee1a14709d39aef80ca8980a40a">THREAD_CONTEXT_SWITCH_HOOK</a>(ntp, otp)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Context switch hook.  <a href="#gac0317ee1a14709d39aef80ca8980a40a"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#gae52e2c3230a9e87d16befd547c2f92ef">IDLE_LOOP_HOOK</a>()</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Idle Loop hook.  <a href="#gae52e2c3230a9e87d16befd547c2f92ef"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#ga132e1bd495c4f7c9b92d63b26705dfe1">SYSTEM_TICK_EVENT_HOOK</a>()</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">System tick event hook.  <a href="#ga132e1bd495c4f7c9b92d63b26705dfe1"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__config.html#ga71e0932757a8180816104fa313171c9a">SYSTEM_HALT_HOOK</a>()</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">System halt hook.  <a href="#ga71e0932757a8180816104fa313171c9a"></a><br/></td></tr>
</table>
<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
<p>Kernel related settings and hooks. </p>
<hr/><h2>Define Documentation</h2>
<a class="anchor" id="gad602fd2546073869a10859158d865b9b"></a><!-- doxytag: member="chconf.h::CH_DBG_ENABLE_ASSERTS" ref="gad602fd2546073869a10859158d865b9b" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#gad602fd2546073869a10859158d865b9b">CH_DBG_ENABLE_ASSERTS</a>&#160;&#160;&#160;TRUE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Debug option, consistency checks. </p>
<p>If enabled then all the assertions in the kernel code are activated. This includes consistency checks inside the kernel, runtime anomalies and port-defined checks.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>FALSE</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="gaef984ca3bfd8a71478ad55ce6e56a8bb"></a><!-- doxytag: member="chconf.h::CH_DBG_ENABLE_CHECKS" ref="gaef984ca3bfd8a71478ad55ce6e56a8bb" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#gaef984ca3bfd8a71478ad55ce6e56a8bb">CH_DBG_ENABLE_CHECKS</a>&#160;&#160;&#160;TRUE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Debug option, parameters checks. </p>
<p>If enabled then the checks on the API functions input parameters are activated.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>FALSE</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="gab93d9ee904f15d4f2c26ef2a1394a1d7"></a><!-- doxytag: member="chconf.h::CH_DBG_ENABLE_STACK_CHECK" ref="gab93d9ee904f15d4f2c26ef2a1394a1d7" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#gab93d9ee904f15d4f2c26ef2a1394a1d7">CH_DBG_ENABLE_STACK_CHECK</a>&#160;&#160;&#160;TRUE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Debug option, stack checks. </p>
<p>If enabled then a runtime stack check is performed.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>FALSE</code>. </dd>
<dd>
The stack check is performed in a architecture/port dependent way. It may not be implemented or some ports. </dd>
<dd>
The default failure mode is to halt the system with the global <code>panic_msg</code> variable set to <code>NULL</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="ga8bc4cfd861131aeb3c880347d0068229"></a><!-- doxytag: member="chconf.h::CH_DBG_ENABLE_TRACE" ref="ga8bc4cfd861131aeb3c880347d0068229" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#ga8bc4cfd861131aeb3c880347d0068229">CH_DBG_ENABLE_TRACE</a>&#160;&#160;&#160;TRUE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Debug option, trace buffer. </p>
<p>If enabled then the context switch circular trace buffer is activated.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>FALSE</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="ga6a859dd249adfb66b9bbf809061ea06c"></a><!-- doxytag: member="chconf.h::CH_DBG_FILL_THREADS" ref="ga6a859dd249adfb66b9bbf809061ea06c" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#ga6a859dd249adfb66b9bbf809061ea06c">CH_DBG_FILL_THREADS</a>&#160;&#160;&#160;TRUE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Debug option, stacks initialization. </p>
<p>If enabled then the threads working area is filled with a byte value when a thread is created. This can be useful for the runtime measurement of the used stack.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>FALSE</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="ga10db71bc25605169dddc82c1604b0a16"></a><!-- doxytag: member="chconf.h::CH_DBG_SYSTEM_STATE_CHECK" ref="ga10db71bc25605169dddc82c1604b0a16" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#ga10db71bc25605169dddc82c1604b0a16">CH_DBG_SYSTEM_STATE_CHECK</a>&#160;&#160;&#160;TRUE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Debug option, system state check. </p>
<p>If enabled the correct call protocol for system APIs is checked at runtime.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>FALSE</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="gadc9c00c2e5b6e766ded8dfa77c0c90c1"></a><!-- doxytag: member="chconf.h::CH_DBG_THREADS_PROFILING" ref="gadc9c00c2e5b6e766ded8dfa77c0c90c1" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#gadc9c00c2e5b6e766ded8dfa77c0c90c1">CH_DBG_THREADS_PROFILING</a>&#160;&#160;&#160;TRUE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Debug option, threads profiling. </p>
<p>If enabled then a field is added to the <code>Thread</code> structure that counts the system ticks occurred while executing the thread.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>TRUE</code>. </dd>
<dd>
This debug option is defaulted to TRUE because it is required by some test cases into the test suite. </dd></dl>

</div>
</div>
<a class="anchor" id="ga195ab8ff3340a18d4513cbaf915078f2"></a><!-- doxytag: member="chconf.h::CH_FREQUENCY" ref="ga195ab8ff3340a18d4513cbaf915078f2" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#ga195ab8ff3340a18d4513cbaf915078f2">CH_FREQUENCY</a>&#160;&#160;&#160;1000</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>System tick frequency. </p>
<p>Frequency of the system timer that drives the system ticks. This setting also defines the system tick time unit. </p>

</div>
</div>
<a class="anchor" id="gac73902e3c40b375483f9dde71e83253d"></a><!-- doxytag: member="chconf.h::CH_MEMCORE_SIZE" ref="gac73902e3c40b375483f9dde71e83253d" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#gac73902e3c40b375483f9dde71e83253d">CH_MEMCORE_SIZE</a>&#160;&#160;&#160;0</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Managed RAM size. </p>
<p>Size of the RAM area to be managed by the OS. If set to zero then the whole available RAM is used. The core memory is made available to the heap allocator and/or can be used directly through the simplified core memory allocator.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>In order to let the OS manage the whole RAM the linker script must provide the <code>__heap_base__</code> and <code>__heap_end__</code> symbols. </dd>
<dd>
Requires <code>CH_USE_MEMCORE</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="gac7ceed3b75958cb6f7a977aab5ee249f"></a><!-- doxytag: member="chconf.h::CH_NO_IDLE_THREAD" ref="gac7ceed3b75958cb6f7a977aab5ee249f" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#gac7ceed3b75958cb6f7a977aab5ee249f">CH_NO_IDLE_THREAD</a>&#160;&#160;&#160;FALSE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Idle thread automatic spawn suppression. </p>
<p>When this option is activated the function <code>chSysInit()</code> does not spawn the idle thread automatically. The application has then the responsibility to do one of the following:</p>
<ul>
<li>Spawn a custom idle thread at priority <code>IDLEPRIO</code>.</li>
<li>Change the <a class="el" href="group___ball_balancing.html#ga840291bc02cba5474a4cb46a9b9566fe" title="Application entry point.">main()</a> thread priority to <code>IDLEPRIO</code> then enter an endless loop. In this scenario the <code><a class="el" href="group___ball_balancing.html#ga840291bc02cba5474a4cb46a9b9566fe" title="Application entry point.">main()</a></code> thread acts as the idle thread.</li>
</ul>
<dl class="note"><dt><b>Note:</b></dt><dd>Unless an idle thread is spawned the <code><a class="el" href="group___ball_balancing.html#ga840291bc02cba5474a4cb46a9b9566fe" title="Application entry point.">main()</a></code> thread must not enter a sleep state. </dd></dl>

</div>
</div>
<a class="anchor" id="gaa5a3d403206b04dfa43ee769e8a220c6"></a><!-- doxytag: member="chconf.h::CH_OPTIMIZE_SPEED" ref="gaa5a3d403206b04dfa43ee769e8a220c6" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#gaa5a3d403206b04dfa43ee769e8a220c6">CH_OPTIMIZE_SPEED</a>&#160;&#160;&#160;TRUE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>OS optimization. </p>
<p>If enabled then time efficient rather than space efficient code is used when two possible implementations exist.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>This is not related to the compiler optimization options. </dd>
<dd>
The default is <code>TRUE</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="ga3c6800242611cf244a38c4a870e8515a"></a><!-- doxytag: member="chconf.h::CH_TIME_QUANTUM" ref="ga3c6800242611cf244a38c4a870e8515a" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#ga3c6800242611cf244a38c4a870e8515a">CH_TIME_QUANTUM</a>&#160;&#160;&#160;20</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Round robin interval. </p>
<p>This constant is the number of system ticks allowed for the threads before preemption occurs. Setting this value to zero disables the preemption for threads with equal priority and the round robin becomes cooperative. Note that higher priority threads can still preempt, the kernel is always preemptive.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>Disabling the round robin preemption makes the kernel more compact and generally faster. </dd></dl>

</div>
</div>
<a class="anchor" id="ga24fd7fe539fd6094b5db3215e1721c9c"></a><!-- doxytag: member="chconf.h::CH_USE_CONDVARS" ref="ga24fd7fe539fd6094b5db3215e1721c9c" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#ga24fd7fe539fd6094b5db3215e1721c9c">CH_USE_CONDVARS</a>&#160;&#160;&#160;TRUE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Conditional Variables APIs. </p>
<p>If enabled then the conditional variables APIs are included in the kernel.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>TRUE</code>. </dd>
<dd>
Requires <code>CH_USE_MUTEXES</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="gaccc2c032c409bced696f75877e270979"></a><!-- doxytag: member="chconf.h::CH_USE_CONDVARS_TIMEOUT" ref="gaccc2c032c409bced696f75877e270979" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#gaccc2c032c409bced696f75877e270979">CH_USE_CONDVARS_TIMEOUT</a>&#160;&#160;&#160;TRUE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Conditional Variables APIs with timeout. </p>
<p>If enabled then the conditional variables APIs with timeout specification are included in the kernel.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>TRUE</code>. </dd>
<dd>
Requires <code>CH_USE_CONDVARS</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="gaae4996e24bbee7d66528671cec8b8749"></a><!-- doxytag: member="chconf.h::CH_USE_DYNAMIC" ref="gaae4996e24bbee7d66528671cec8b8749" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#gaae4996e24bbee7d66528671cec8b8749">CH_USE_DYNAMIC</a>&#160;&#160;&#160;TRUE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Dynamic Threads APIs. </p>
<p>If enabled then the dynamic threads creation APIs are included in the kernel.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>TRUE</code>. </dd>
<dd>
Requires <code>CH_USE_WAITEXIT</code>. </dd>
<dd>
Requires <code>CH_USE_HEAP</code> and/or <code>CH_USE_MEMPOOLS</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="ga5e3ac686cd33ad40a89aaaf97b3dc781"></a><!-- doxytag: member="chconf.h::CH_USE_EVENTS" ref="ga5e3ac686cd33ad40a89aaaf97b3dc781" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#ga5e3ac686cd33ad40a89aaaf97b3dc781">CH_USE_EVENTS</a>&#160;&#160;&#160;TRUE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Events Flags APIs. </p>
<p>If enabled then the event flags APIs are included in the kernel.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>TRUE</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="ga64a6ad752750f42fe2474d3e7f191a71"></a><!-- doxytag: member="chconf.h::CH_USE_EVENTS_TIMEOUT" ref="ga64a6ad752750f42fe2474d3e7f191a71" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#ga64a6ad752750f42fe2474d3e7f191a71">CH_USE_EVENTS_TIMEOUT</a>&#160;&#160;&#160;TRUE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Events Flags APIs with timeout. </p>
<p>If enabled then the events APIs with timeout specification are included in the kernel.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>TRUE</code>. </dd>
<dd>
Requires <code>CH_USE_EVENTS</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="gaaeb266ab6131572f1d8f164bddf2da3f"></a><!-- doxytag: member="chconf.h::CH_USE_HEAP" ref="gaaeb266ab6131572f1d8f164bddf2da3f" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#gaaeb266ab6131572f1d8f164bddf2da3f">CH_USE_HEAP</a>&#160;&#160;&#160;TRUE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Heap Allocator APIs. </p>
<p>If enabled then the memory heap allocator APIs are included in the kernel.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>TRUE</code>. </dd>
<dd>
Requires <code>CH_USE_MEMCORE</code> and either <code>CH_USE_MUTEXES</code> or <code>CH_USE_SEMAPHORES</code>. </dd>
<dd>
Mutexes are recommended. </dd></dl>

</div>
</div>
<a class="anchor" id="ga6cf1736db681617019f96c4c209d2716"></a><!-- doxytag: member="chconf.h::CH_USE_MAILBOXES" ref="ga6cf1736db681617019f96c4c209d2716" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#ga6cf1736db681617019f96c4c209d2716">CH_USE_MAILBOXES</a>&#160;&#160;&#160;TRUE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Mailboxes APIs. </p>
<p>If enabled then the asynchronous messages (mailboxes) APIs are included in the kernel.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>TRUE</code>. </dd>
<dd>
Requires <code>CH_USE_SEMAPHORES</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="ga4785d390f3a787916c5a5c41e953577d"></a><!-- doxytag: member="chconf.h::CH_USE_MALLOC_HEAP" ref="ga4785d390f3a787916c5a5c41e953577d" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#ga4785d390f3a787916c5a5c41e953577d">CH_USE_MALLOC_HEAP</a>&#160;&#160;&#160;FALSE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>C-runtime allocator. </p>
<p>If enabled the the heap allocator APIs just wrap the C-runtime <code>malloc()</code> and <code>free()</code> functions.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>FALSE</code>. </dd>
<dd>
Requires <code>CH_USE_HEAP</code>. </dd>
<dd>
The C-runtime may or may not require <code>CH_USE_MEMCORE</code>, see the appropriate documentation. </dd></dl>

</div>
</div>
<a class="anchor" id="gaff85f4d919dac30a337ce2f34e2fa1af"></a><!-- doxytag: member="chconf.h::CH_USE_MEMCORE" ref="gaff85f4d919dac30a337ce2f34e2fa1af" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#gaff85f4d919dac30a337ce2f34e2fa1af">CH_USE_MEMCORE</a>&#160;&#160;&#160;TRUE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Core Memory Manager APIs. </p>
<p>If enabled then the core memory manager APIs are included in the kernel.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>TRUE</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="gac456517b37f104d2226fef50310c79f8"></a><!-- doxytag: member="chconf.h::CH_USE_MEMPOOLS" ref="gac456517b37f104d2226fef50310c79f8" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#gac456517b37f104d2226fef50310c79f8">CH_USE_MEMPOOLS</a>&#160;&#160;&#160;TRUE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Memory Pools Allocator APIs. </p>
<p>If enabled then the memory pools allocator APIs are included in the kernel.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>TRUE</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="ga3823e336736d522bbfaf780c86746482"></a><!-- doxytag: member="chconf.h::CH_USE_MESSAGES" ref="ga3823e336736d522bbfaf780c86746482" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#ga3823e336736d522bbfaf780c86746482">CH_USE_MESSAGES</a>&#160;&#160;&#160;TRUE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Synchronous Messages APIs. </p>
<p>If enabled then the synchronous messages APIs are included in the kernel.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>TRUE</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="gaf48947f33ed7a44a7701d84d83d94a1c"></a><!-- doxytag: member="chconf.h::CH_USE_MESSAGES_PRIORITY" ref="gaf48947f33ed7a44a7701d84d83d94a1c" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#gaf48947f33ed7a44a7701d84d83d94a1c">CH_USE_MESSAGES_PRIORITY</a>&#160;&#160;&#160;FALSE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Synchronous Messages queuing mode. </p>
<p>If enabled then messages are served by priority rather than in FIFO order.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>FALSE</code>. Enable this if you have special requirements. </dd>
<dd>
Requires <code>CH_USE_MESSAGES</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="ga4f461a7b5edbff2405b7b40d2bb238a6"></a><!-- doxytag: member="chconf.h::CH_USE_MUTEXES" ref="ga4f461a7b5edbff2405b7b40d2bb238a6" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#ga4f461a7b5edbff2405b7b40d2bb238a6">CH_USE_MUTEXES</a>&#160;&#160;&#160;TRUE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Mutexes APIs. </p>
<p>If enabled then the mutexes APIs are included in the kernel.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>TRUE</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="gaabe4bd52d2fd1b180ebba1d1e8243051"></a><!-- doxytag: member="chconf.h::CH_USE_QUEUES" ref="gaabe4bd52d2fd1b180ebba1d1e8243051" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#gaabe4bd52d2fd1b180ebba1d1e8243051">CH_USE_QUEUES</a>&#160;&#160;&#160;TRUE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>I/O Queues APIs. </p>
<p>If enabled then the I/O queues APIs are included in the kernel.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>TRUE</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="ga881045654c5c0b04081bf89da3fe4534"></a><!-- doxytag: member="chconf.h::CH_USE_REGISTRY" ref="ga881045654c5c0b04081bf89da3fe4534" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#ga881045654c5c0b04081bf89da3fe4534">CH_USE_REGISTRY</a>&#160;&#160;&#160;TRUE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Threads registry APIs. </p>
<p>If enabled then the registry APIs are included in the kernel.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>TRUE</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="gab88f410fdc6a67192194a8431d991b27"></a><!-- doxytag: member="chconf.h::CH_USE_SEMAPHORES" ref="gab88f410fdc6a67192194a8431d991b27" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#gab88f410fdc6a67192194a8431d991b27">CH_USE_SEMAPHORES</a>&#160;&#160;&#160;TRUE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Semaphores APIs. </p>
<p>If enabled then the Semaphores APIs are included in the kernel.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>TRUE</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="ga866568c0387963f11c078a8d939c2284"></a><!-- doxytag: member="chconf.h::CH_USE_SEMAPHORES_PRIORITY" ref="ga866568c0387963f11c078a8d939c2284" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#ga866568c0387963f11c078a8d939c2284">CH_USE_SEMAPHORES_PRIORITY</a>&#160;&#160;&#160;FALSE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Semaphores queuing mode. </p>
<p>If enabled then the threads are enqueued on semaphores by priority rather than in FIFO order.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>FALSE</code>. Enable this if you have special requirements. </dd>
<dd>
Requires <code>CH_USE_SEMAPHORES</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="gae9e6ff0fe1964761ea6e1bce51d8ee59"></a><!-- doxytag: member="chconf.h::CH_USE_SEMSW" ref="gae9e6ff0fe1964761ea6e1bce51d8ee59" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#gae9e6ff0fe1964761ea6e1bce51d8ee59">CH_USE_SEMSW</a>&#160;&#160;&#160;TRUE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Atomic semaphore API. </p>
<p>If enabled then the semaphores the <code>chSemSignalWait()</code> API is included in the kernel.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>TRUE</code>. </dd>
<dd>
Requires <code>CH_USE_SEMAPHORES</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="gac5e6308f66b8fdb57f0c849ed22b3d95"></a><!-- doxytag: member="chconf.h::CH_USE_WAITEXIT" ref="gac5e6308f66b8fdb57f0c849ed22b3d95" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#gac5e6308f66b8fdb57f0c849ed22b3d95">CH_USE_WAITEXIT</a>&#160;&#160;&#160;TRUE</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Threads synchronization APIs. </p>
<p>If enabled then the <code>chThdWait()</code> function is included in the kernel.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>The default is <code>TRUE</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="gae52e2c3230a9e87d16befd547c2f92ef"></a><!-- doxytag: member="chconf.h::IDLE_LOOP_HOOK" ref="gae52e2c3230a9e87d16befd547c2f92ef" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#gae52e2c3230a9e87d16befd547c2f92ef">IDLE_LOOP_HOOK</a></td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment">{                                                  \
  <span class="comment">/* Idle loop code here.*/</span>                                                 \
}
</pre></div>
<p>Idle Loop hook. </p>
<p>This hook is continuously invoked by the idle thread loop. </p>

</div>
</div>
<a class="anchor" id="ga71e0932757a8180816104fa313171c9a"></a><!-- doxytag: member="chconf.h::SYSTEM_HALT_HOOK" ref="ga71e0932757a8180816104fa313171c9a" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#ga71e0932757a8180816104fa313171c9a">SYSTEM_HALT_HOOK</a></td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment">{                                                \
  <span class="comment">/* System halt code here.*/</span>                                               \
}
</pre></div>
<p>System halt hook. </p>
<p>This hook is invoked in case to a system halting error before the system is halted. </p>

</div>
</div>
<a class="anchor" id="ga132e1bd495c4f7c9b92d63b26705dfe1"></a><!-- doxytag: member="chconf.h::SYSTEM_TICK_EVENT_HOOK" ref="ga132e1bd495c4f7c9b92d63b26705dfe1" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#ga132e1bd495c4f7c9b92d63b26705dfe1">SYSTEM_TICK_EVENT_HOOK</a></td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment">{                                          \
  <span class="comment">/* System tick event code here.*/</span>                                         \
}
</pre></div>
<p>System tick event hook. </p>
<p>This hook is invoked in the system tick handler immediately after processing the virtual timers queue. </p>

</div>
</div>
<a class="anchor" id="gac0317ee1a14709d39aef80ca8980a40a"></a><!-- doxytag: member="chconf.h::THREAD_CONTEXT_SWITCH_HOOK" ref="gac0317ee1a14709d39aef80ca8980a40a" args="(ntp, otp)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#gac0317ee1a14709d39aef80ca8980a40a">THREAD_CONTEXT_SWITCH_HOOK</a></td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">ntp, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">otp&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment">{                              \
  <span class="comment">/* System halt code here.*/</span>                                               \
}
</pre></div>
<p>Context switch hook. </p>
<p>This hook is invoked just before switching between threads. </p>

</div>
</div>
<a class="anchor" id="gab8f241a87da52027625c9cc3d8403ebb"></a><!-- doxytag: member="chconf.h::THREAD_EXT_EXIT_HOOK" ref="gab8f241a87da52027625c9cc3d8403ebb" args="(tp)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#gab8f241a87da52027625c9cc3d8403ebb">THREAD_EXT_EXIT_HOOK</a></td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">tp</td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment">{                                          \
  <span class="comment">/* Add threads finalization code here.*/</span>                                  \
}
</pre></div>
<p>Threads finalization hook. </p>
<p>User finalization code added to the <code>chThdExit()</code> API.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>It is inserted into lock zone. </dd>
<dd>
It is also invoked when the threads simply return in order to terminate. </dd></dl>

</div>
</div>
<a class="anchor" id="gaba26fd717f33330fa56dcc7919a3f02f"></a><!-- doxytag: member="chconf.h::THREAD_EXT_FIELDS" ref="gaba26fd717f33330fa56dcc7919a3f02f" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#gaba26fd717f33330fa56dcc7919a3f02f">THREAD_EXT_FIELDS</a>&#160;&#160;&#160;/* Add threads custom fields here.*/</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Threads descriptor structure extension. </p>
<p>User fields added to the end of the <code>Thread</code> structure. </p>

</div>
</div>
<a class="anchor" id="gaeb57466a9200b8c073ac96a3f1a9c34c"></a><!-- doxytag: member="chconf.h::THREAD_EXT_INIT_HOOK" ref="gaeb57466a9200b8c073ac96a3f1a9c34c" args="(tp)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__config.html#gaeb57466a9200b8c073ac96a3f1a9c34c">THREAD_EXT_INIT_HOOK</a></td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">tp</td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment">{                                          \
  <span class="comment">/* Add threads initialization code here.*/</span>                                \
}
</pre></div>
<p>Threads initialization hook. </p>
<p>User initialization code added to the <code>chThdInit()</code> API.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>It is invoked from within <code>chThdInit()</code> and implicitly from all the threads creation APIs. </dd></dl>

</div>
</div>
</div><!-- contents -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Defines</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

</div>
  <div id="nav-path" class="navpath">
    <ul>

    <li class="footer">Generated on Wed Jun 5 2013 12:23:45 for Ball Balancing Plate by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.6.1 </li>
   </ul>
 </div>


</body>
</html>
